#!/usr/bin/python
# -*- coding: UTF-8 -*-
#运行文件 人工智能.py
#作者 幽灵代码
#QQ 29672366
#邮箱 29672366@qq.com
#日期 2020.10.4

import sys
import logging
sys.path.append('core')
sys.path.append('lib/sys')
sys.path.append('lib/user')

import os 
import fnmatch
import xml
import random
import re
import bzd
import bot
import dbmanage
import traceback

from logging import handlers

class Logger(object):
    level_relations = {
        'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'crit':logging.CRITICAL
    }#日志级别关系映射

    def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)#设置日志格式
        self.logger.setLevel(self.level_relations.get(level))#设置日志级别
        sh = logging.StreamHandler()#往屏幕上输出
        sh.setFormatter(format_str) #设置屏幕上显示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器
        #实例化TimedRotatingFileHandler
        #interval是时间间隔，backupCount是备份文件的个数，如果超过这个个数，就会自动删除，when是间隔的时间单位，单位有以下几种：
        # S 秒
        # M 分
        # H 小时、
        # D 天、
        # W 每星期（interval==0时代表星期一）
        # midnight 每天凌晨
        th.setFormatter(format_str)#设置文件里写入的格式
        self.logger.addHandler(sh) #把对象加到logger里
        self.logger.addHandler(th)


        
log = Logger('log/error.log',level='debug')

dbmanage.reset()

def process(userinput):
    answer = bot.chatToBot(userinput)
    if(answer==""):
        answer = bzd.getAnswer(userinput)
    print('bot:'+answer)
    
def run(userinput):
    try:
       process(userinput) 
    except Exception as ex:
        #问题语句写入log
        log.logger.error(userinput)
        log.logger.error(ex)
		print("An exception has occurred,See error log for more details.")
    
while(True):
    userinput = input("输入语句：")
    if(userinput=='重新加载'):
        dbmanage.reload()
        continue
    run(userinput)


